Add a way to set symbolic colors per-widget
authorMatthias Clasen <mclasen@redhat.com>
Thu, 29 Apr 2010 02:59:03 +0000 (22:59 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 29 Apr 2010 21:01:25 +0000 (17:01 -0400)
The new function, gtk_widget_modify_symbolic_color() is similar
in spirit to the other gtk_widget_modify_ functions.

docs/reference/gtk/gtk-sections.txt
gtk/gtk.symbols
gtk/gtkrc.c
gtk/gtkrc.h
gtk/gtkwidget.c
gtk/gtkwidget.h

index bf9c664b7536e6d0ed21f56cf96eb27b05a13960..3ffd3a69582c5561840f5d760f3b6fe8ccf8cebc 100644 (file)
@@ -5661,6 +5661,7 @@ gtk_widget_modify_text
 gtk_widget_modify_base
 gtk_widget_modify_font
 gtk_widget_modify_cursor
+gtk_widget_modify_symbolic_color
 gtk_widget_create_pango_context
 gtk_widget_get_pango_context
 gtk_widget_create_pango_layout
index ff85c8c4dc799c712cdafbdc4bcc959152eb9dff..08f1ae0aa52e92c45e6e6a9ce4c0720224f5b897 100644 (file)
@@ -5170,6 +5170,7 @@ gtk_widget_modify_cursor
 gtk_widget_modify_font
 gtk_widget_modify_style
 gtk_widget_modify_text
+gtk_widget_modify_symbolic_color
 gtk_widget_new
 gtk_widget_path
 gtk_widget_pop_colormap
index 2e94cdfcec74730d46d8400e130569a836348f96..556e92be8ea50e7f88b3734ae7052927d535ba69 100644 (file)
@@ -1334,6 +1334,34 @@ _gtk_rc_style_get_color_hashes (GtkRcStyle *rc_style)
   return priv->color_hashes;
 }
 
+static void gtk_rc_style_prepend_empty_color_hash (GtkRcStyle *rc_style);
+
+void
+_gtk_rc_style_set_symbolic_color (GtkRcStyle     *rc_style,
+                                  const gchar    *name,
+                                  const GdkColor *color)
+{
+  GtkRcStylePrivate *priv = GTK_RC_STYLE_GET_PRIVATE (rc_style);
+  GHashTable *our_hash = NULL;
+
+  if (priv->color_hashes)
+    our_hash = priv->color_hashes->data;
+
+  if (our_hash == NULL)
+    {
+      if (color == NULL)
+        return;
+
+      gtk_rc_style_prepend_empty_color_hash (rc_style);
+      our_hash = priv->color_hashes->data;
+    }
+
+  if (color)
+    g_hash_table_insert (our_hash, g_strdup (name), gdk_color_copy (color));
+  else
+    g_hash_table_remove (our_hash, name);
+}
+
 static gint
 gtk_rc_properties_cmp (gconstpointer bsearch_node1,
                       gconstpointer bsearch_node2)
index 1ca2d33138cad74304db0eff0aa931bf3f10a46e..0d5e0cebafec0ecf59258792a8a6f7e4790ee37a 100644 (file)
@@ -263,6 +263,10 @@ void             _gtk_rc_style_unset_rc_property         (GtkRcStyle *rc_style,
 
 GSList     * _gtk_rc_style_get_color_hashes        (GtkRcStyle *rc_style);
 
+void         _gtk_rc_style_set_symbolic_color       (GtkRcStyle     *rc_style,
+                                                     const gchar    *name,
+                                                     const GdkColor *color);
+
 const gchar* _gtk_rc_context_get_default_font_name (GtkSettings *settings);
 void         _gtk_rc_context_destroy               (GtkSettings *settings);
 
index 06bfe04cca581681d79c6512283670a52c4cc9f9..9935874f48c229857392510049c55da7e7d5d1d1 100644 (file)
@@ -6683,6 +6683,32 @@ gtk_widget_modify_color_component (GtkWidget      *widget,
   gtk_widget_modify_style (widget, rc_style);
 }
 
+/**
+ * gtk_widget_modify_symbolic_color:
+ * @widget: a #GtkWidget
+ * @name: the name of the symbolic color to modify
+ * @color: (allow-none): the color to assign (does not need to be allocated),
+ *         or %NULL to undo the effect of previous calls to
+ *         of gtk_widget_modify_symbolic_color().
+ *
+ * Sets a symbolic color for a widget.
+ * All other style values are left untouched. See also
+ * gtk_widget_modify_style().
+ *
+ * Since: 2.22
+ **/
+void
+gtk_widget_modify_symbolic_color (GtkWidget      *widget,
+                                  const gchar    *name,
+                                  const GdkColor *color)
+{
+  GtkRcStyle *rc_style = gtk_widget_get_modifier_style (widget);
+
+  _gtk_rc_style_set_symbolic_color (rc_style, name, color);
+
+  gtk_widget_modify_style (widget, rc_style);
+}
+
 /**
  * gtk_widget_modify_fg:
  * @widget: a #GtkWidget
index 0b2d84bccbd7ff6e8a67cabcf3991613c9539356..8e12ce8b86512aaee7ce3a5fe832f2073d811a8f 100644 (file)
@@ -1156,6 +1156,9 @@ void        gtk_widget_modify_cursor      (GtkWidget            *widget,
                                           const GdkColor       *secondary);
 void        gtk_widget_modify_font        (GtkWidget            *widget,
                                           PangoFontDescription *font_desc);
+void        gtk_widget_modify_symbolic_color (GtkWidget         *widget,
+                                           const gchar          *name,
+                                           const GdkColor       *color);
 
 #ifndef GTK_DISABLE_DEPRECATED